;     Finalize is a library for Bigloo scheme which provides an object
;     finalization interface to the GC C library.

;     Copyright (C) 2005 Will M. Farr (wmfarr@gmail.com)

;     This program is free software; you can redistribute it and/or modify
;     it under the terms of the GNU General Public License as published by
;     the Free Software Foundation; either version 2 of the License, or
;     (at your option) any later version.

;     This program is distributed in the hope that it will be useful,
;     but WITHOUT ANY WARRANTY; without even the implied warranty of
;     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;     GNU General Public License for more details.

;     You should have received a copy of the GNU General Public License
;     along with this program; if not, write to the Free Software
;     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

(module finalize
   (eval (export-exports))
   (export (invoke-finalizer obj::obj finalizer::procedure)
	   (register-finalizer! finalizer::procedure obj))
   (extern
    (export invoke-finalizer "invoke_finalizer")))

(define (invoke-finalizer obj::obj finalizer::procedure)
   (finalizer obj))

(define (register-finalizer! finalizer::procedure obj)
   (pragma "GC_register_finalizer(($1), invoke_finalizer, ($2), 0, 0)"
	   obj finalizer)
   '())
